import type { ProductApi } from '#/models/product/product';

import { requestClient } from '#/api/request';

import type { PageResponse } from '#/types/common';
import type { ProductQueryParams } from '#/types/product/product';


/**
 * 获取产品列表
 * @param params - 查询参数，支持分页、过滤和排序
 * @returns 分页的产品列表数据
 */
export const getProductList = (
  params?: ProductQueryParams,
): Promise<PageResponse<ProductApi.Product>> => {
  return requestClient.get('/product/product/', { params });
};

/**
 * 获取单个产品详情
 * @param productId - 产品ID
 * @returns 产品详情
 */
export const getProduct = (productId: number): Promise<ProductApi.Product> =>
  requestClient.get(`/product/product/${productId}/`);

/**
 * 创建产品
 * @param data - 产品数据
 * @returns 创建成功的产品信息
 */
export const createProduct = (
  data: Partial<ProductApi.Product>,
): Promise<ProductApi.Product> => requestClient.post('/product/product/', data);

/**
 * 更新产品
 * @param productId - 产品ID
 * @param data - 更新的产品信息
 * @returns 更新后的产品信息
 */
export const updateProduct = (
  productId: number,
  data: Partial<ProductApi.Product>,
): Promise<ProductApi.Product> =>
  requestClient.put(`/product/product/${productId}/`, data);

/**
 * 删除产品
 * @param productId - 产品ID
 * @returns 删除结果
 */
export const deleteProduct = (productId: number): Promise<any> => {
  return requestClient.delete(`/product/product/${productId}/`);
};

/**
 * 批量删除产品
 * @param productIds - 产品ID数组
 * @returns 批量删除操作的响应
 */
export const batchDeleteProducts = (productIds: number[]): Promise<void> => {
  return requestClient.delete('/admin/product/product/batch_delete/', {
    data: { product_ids: productIds },
  });
};

/**
 * 搜索产品（支持按名称或SKU搜索），用于BOM模块的产品选择器
 * @param keyword - 搜索参数对象或关键词字符串
 * @returns 匹配的产品列表，每个产品包含id、display_name（名称+SKU）
 */
export const searchProducts = async (keyword: string | { search: string }): Promise<any[]> => {
  // 处理可能的对象格式参数
  const searchKeyword = typeof keyword === 'object' ? keyword.search : keyword;
  try {
    // console.log('发送请求到API，参数:', { search: searchKeyword, page_size: 20, is_active: true });
    const response = await requestClient.get('/product/product/', {
      params: {
        search: searchKeyword,
        page_size: 20,
        is_active: true, // 使用后端期望的参数名
      },
    });
    
    // console.log('API响应数据类型:', typeof response, '响应数据结构:', JSON.stringify(response, null, 2));
    
    // 处理各种可能的响应格式
    let items = [];
    if (Array.isArray(response)) {
      // 如果直接返回数组
      items = response;
    } else if (response && typeof response === 'object') {
      // 如果返回对象，尝试各种可能的路径
      items = response.results || response.data || [];
    }
    
    // 转换数据格式
    const formattedItems = items.map((item: any) => {
      const formatted = {
        ...item,
        // 确保product_id是字符串类型
        product_id: String(item.product_id || item.id || ''),
        display_name: item.sku && item.name ? `${item.sku} - ${item.name}` : item.name || item.sku || '未命名产品'
      };
      return formatted;
    });
    
    return formattedItems;
  } catch (error) {
    console.error('搜索产品API调用失败:', error);
    return [];
  }
};
